package com.xca.is.model;

import android.util.Log;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import com.xca.is.http.HttpConnect;
import com.xca.is.repository.TongYiRepository;

import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;

public class TongYiModel extends ViewModel {
    private TongYiRepository repository;
    private  MutableLiveData<String> liveData = new MutableLiveData<>();
    private HttpConnect httpConnect ;
    public TongYiModel() {
        repository = null;
    }

    public void setData(HttpConnect httpConnect){
        this.repository = new TongYiRepository();
        this.httpConnect = httpConnect ;
    }


    public void getAi(String type , String text , String coder) {
            switch (type){
                case "通义":
                    getData(text);
                    break;
                case "绮罗":
                    getData2(text);
                    break;
                case "傲娇姐姐":
                    getData3(text);
                    break;
                case "猫娘":
                    getData4(text);
                    break;
                case "涩猫":
                    getData5(text);
                    break;
                case "百度":
                    getData6(text);
                    break;
                case "Gpt人设":
                    getData7(coder,text);
                case "讯飞" :
                    getData8(text);
                    break;
        }
    }

    public void getData(String text){
        if (text != null) {
            repository.getData(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData2(String text){
        if (text != null) {
            repository.getData2(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData3(String text){
        if (text != null) {
            repository.getData3(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData4(String text){
        if (text != null) {
            repository.getData4(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData5(String text){
        if (text != null) {
            repository.getData5(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData6(String text){
        if (text != null) {
            repository.getData6(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData7(String coder , String text){
        if (text != null) {
            repository.getData7(coder , text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }
    public void getData8(String text){
        if (text != null) {
            repository.getData8(text)
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            // 可以在这里处理订阅开始时的操作，如显示加载指示器
                            httpConnect.Loading(true);
                        }

                        @Override
                        public void onNext(@NonNull String s) {
                            if (s != null) {
                                Log.d("获取到的数据", s);
                                liveData.postValue(s);
                            }
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            // 处理错误情况，例如显示错误信息或记录日志
                            httpConnect.Loading(false);
                            httpConnect.Error(e.getMessage());
                            Log.d("错误信息", e.getMessage());
                        }

                        @Override
                        public void onComplete() {
                            // 处理完成时的操作，如关闭加载指示器
                            httpConnect.Loading(false);
                        }
                    });
        }
    }


    public MutableLiveData<String> getLiveData() {
        return liveData;
    }
}